import request from "@/utils/request";

const NOTIFICATION_BASE_URL = "/api/v1/notifications";

/**
 * 通知类型
 */
export type NotificationType = "update" | "event" | "maintenance" | "announcement";

/**
 * 通知链接
 */
export interface NotificationLink {
  /** 链接标题 */
  title: string;
  /** 链接URL */
  url: string;
}

/**
 * 通知信息接口
 */
export interface GameNotification {
  /** 通知ID */
  id: number;
  /** 通知标题 */
  title: string;
  /** 通知摘要 */
  summary: string;
  /** 通知内容（HTML） */
  content: string;
  /** 通知类型 */
  type: NotificationType;
  /** 通知时间 */
  time: string;
  /** 是否已读 */
  read: boolean;
  /** 相关链接 */
  links?: NotificationLink[];
}

const InformAPI = {
  /**
   * 获取通知列表
   *
   * @param type 通知类型
   * @returns 通知列表
   */
  getNotifications(type?: NotificationType) {
    return request<any, GameNotification[]>({
      url: `${NOTIFICATION_BASE_URL}/list`,
      method: "get",
      params: type ? { type } : undefined,
    });
  },

  /**
   * 获取通知详情
   *
   * @param id 通知ID
   * @returns 通知详情
   */
  getNotificationDetail(id: number) {
    return request<any, GameNotification>({
      url: `${NOTIFICATION_BASE_URL}/${id}`,
      method: "get",
    });
  },

  /**
   * 标记通知为已读
   *
   * @param id 通知ID
   */
  markAsRead(id: number) {
    return request({
      url: `${NOTIFICATION_BASE_URL}/${id}/read`,
      method: "put",
    });
  },

  /**
   * 标记所有通知为已读
   */
  markAllAsRead() {
    return request({
      url: `${NOTIFICATION_BASE_URL}/read-all`,
      method: "put",
    });
  },
};

export default InformAPI;
